// processb.cc
#include "comm.hpp"

int main()
{
    int shmid = Getshm();  // 获取共享内存
    log(Debug, "get shm done");
    char *shmaddr = (char*)shmat(shmid, nullptr, 0);  // 把指定的共享内存挂接到当前进程
    log(Debug, "attach shm done, shmaddr: 0x%x", shmaddr);

    int fd = open(FIFO_FILE, O_WRONLY);
    if (fd < 0)
    {
        log(Fatal, "error string: %s, error code: %d", strerror(errno), errno);
        exit(FIFO_OPEN_ERR);
    }
    log(Info, "client open file done, error string: %s, error code: %d", strerror(errno), errno);

    // ipc code，写端
    // 一旦有了共享内存，挂接到自己的地址空间中，就可直接把它当成自己的内存空间来使用，不用调用系统接口
    while (true)
    {
        cout << "Please Enter@ ";
        fgets(shmaddr, size, stdin);  // 可以直接把共享内存当做缓冲区直接写入，不用额外定义缓冲区

        write(fd, "c", 1);  // 通知对方
    }

    shmdt(shmaddr);  // 去关联
    log(Debug, "detach shm done, shmaddr: 0x%x", shmaddr);

    // 关闭信道
    close(fd);

    log(Debug, "processb quit...");
    return 0;
}